#include <iostream>
#include <algorithm>

using namespace std;

const int N = 20;

int n, w;
int c[N];	// 小猫的信息

int cnt; // 用了多少辆车
int s[N]; // 每一辆车的载重

int ret = N;

bool cmp(int x, int y)
{
	return  x > y;
}

void dfs(int pos)
{
	if (cnt > ret) return;

	if (pos > n)
	{
		ret = cnt;
		return;
	}

	// 策略三: 优化搜索顺序
	// 安排已有的车辆
	for (int i = 1; i <= cnt; i++)
	{
		if (s[i] + c[pos] > w) continue;
		s[i] += c[pos];
		dfs(pos + 1);
		s[i] -= c[pos];
	}
	// 安排新车
	cnt++;
	s[cnt] = c[pos];
	dfs(pos + 1);
	s[cnt] = 0;
	cnt--;
}

int main()
{
	cin >> n >> w;

	for (int i = 1; i <= n; i++)	cin >> c[i];

	// 策略三: 优化搜索顺序
	sort(c + 1, c + 1 + n, cmp);

	dfs(1);

	cout << ret << endl;

	return 0;
}